package com.shujia.jichu

import scala.io.{BufferedSource, Source}
import scala.language.implicitConversions

object Demo24implicit {
  def main(args: Array[String]): Unit = {

    /**
     * 隐式转换
     * 1、隐式转换函数
     * 2、隐式转换类
     * 3、隐式转换变量
     *
     * 将一个A类型将来会自动地转换成另一个B类型,类型可以式基本数据类型，也可以是引用数据类型
     *
     * 显式转换
     */
    //    var i:String = "100"
    //    //显式转换
    //    val res1: Int = i.toInt

    //定义一个函数
    //    def fun1(s: Int): Int = {
    //      return s + 1000
    //    }
    //    //调用函数
    //    println(fun1(100))
    //    println(fun1(200))
    //    println(fun1("300".toInt))

    //需求：调用fun1函数，就只传字符串，不会报错
    //定义隐式转换函数
    //在需要返回值类型的功能的时候，自动地根据已有隐式转换函数将参数的类型转成返回值的类型
    //    implicit def implicitFun1(s: String): Int = {
    //      return Integer.parseInt(s)
    //    }

    //    implicit def implicitFun2(s: String): Int = {
    //      return Integer.parseInt(s) + 2000
    //    }
    //
    //
    //    def fun1(s: Int): Int = {
    //      return s + 1000
    //    }
    //    //调用函数
    //    println(fun1(100))
    //    println(fun1(200))
    //    println(fun1("300"))


    import com.shujia.jichu.Demo11._
    //    val stuList: List[String] = "scala/data/students.txt".getLines().toList
    //    val scoreList: List[String] = "scala/data/scores.txt".getLines().toList

    println("1000" + 500) // 1000500 // 使用字符串自身的+拼接功能，做字符串拼接
    println("1000" - 500) // 500   // 字符串中没有-减法功能，自动使用隐式转换中的函数，将字符串转成数字做减法
    println("2000" - 500) // 1500   // 字符串中没有-减法功能，自动使用隐式转换中的函数，将字符串转成数字做减法
  }
}

object Demo11 {
  implicit def implicitFun3(s: String): BufferedSource = Source.fromFile(s)

  implicit def implicitFun1(s: String): Int = Integer.parseInt(s)
}
